0

我有以下情况。我想指出所有这样的 URL:

http://localhost/mypage

对于一个长 URL,就像这样:

http://localhost/index.php?&page=mypage

然后在 PHP 中做这样的事情:

include 'pages/' . $_GET['page'] . '.php';

我尝试了以下方法,但出现了一些错误。

RewriteRule ^(.+)$ index.php?&page=$1 [NC]

有没有办法在不列出 .htaccess 文件中的所有页面的情况下做到这一点?

4

4 回答 4

1

尝试这个:

RewriteEngine on

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)$ index.php?page=$1 [L]

因此,如果您请求http://example.com/about,它将被重写为http://example.com/index.php?page=about

我还建议$_GET['page']在您的index.php脚本中进行一些验证,否则人们将能够导航您的文件系统。

于 2012-12-12T13:42:50.603 回答
0
# This line starts the mod_rewrite module
RewriteEngine on

# If the request is for a file that already exists on the server
RewriteCond %{REQUEST_FILENAME} !-f

# Pass all trafic through the index file (if the requested file doesn't exist)
RewriteRule ^(.*)$ index.php?$1 [L,QSA]

/project/1 将与$_GET['project'] = 1

于 2012-12-12T13:27:24.923 回答
0

你的第一行应该是:

RewriteEngine On

然后使用

RewriteCond %{REQUEST_FILENAME} !-f

RewriteRule ^(.*)$ index.php?page=$1 [L,QSA]

代替

RewriteRule ^(.+)$ index.php?&page=$1 [NC]
于 2012-12-12T13:28:18.980 回答
0

这就是你需要的

RewriteEngine On
RewriteRule ^([a-z]+)$ index.php?&page=$1 [QSA]
于 2012-12-12T13:29:11.013 回答