問題
.htaccess
これは、ルールが実際に存在するディレクトリを含む URL を書き換えているという事実に起因する、非常に基本的/一般的な問題です...
ファイル構造
>support
>sys
>issue
issue.php
.htaccess
(つまり、ディレクトリissue
と.htaccess
ファイルは同じディレクトリにあります: sys
)
書き直しの問題
それで:
RewriteEngine ON
RewriteRule ^issue/(.*)/*$ issue/issue.php?id=$1 [L]
# Note the added /* before $. In case people try to access your url with a trailing slash
動作しないでしょう。これは (注: ->
= リダイレクト先):
http://www.mysite.com/support/sys/issue/1234
-> http://www.mysite.com/support/sys/issue/issue.php? id=1234
-> http://www.mysite.com/support/sys/issue/issue.php?id=issue.php
例/テスト
var_dump($_GET)
と次の URLで試してください。
出力は常に次のようになります。
array(1) { ["id"]=> string(9) "issue.php" }
解決
次の3 つの主なオプションがあります。
- 実際のファイルがリダイレクトされないという条件を追加
- 数字のみを書き換えます。たとえば、書き換えますが、書き換え
issue/123
ません。issue/abc
- 両方を行う
方法 1
RewriteEngine ON
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^issue/(.*)/*$ issue/issue.php?id=$1 [L]
方法 2
RewriteEngine ON
RewriteRule ^issue/(\d*)/*$ issue/issue.php?id=$1 [L]
方法 3
RewriteEngine ON
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^issue/(\d*)/*$ issue/issue.php?id=$1 [L]
ID の取得
これは単純な部分です...
$issueid = $_GET['id'];