我已经在几个星期前就同样的问题寻求帮助,但并没有真正有效的解决方案,所以我正在尝试另外修复它。
所以我有一个网址看起来像
website.com/proj1/post.php?id=130
但我想将网址重构为
website.com/proj1/post/130
经过讨论,一个人建议使用以下htaccess规则
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} -d [OR]
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^ - [L]
RewriteCond %{DOCUMENT_ROOT}/proj1/$1.php -f
RewriteRule ^([\w-]+)/([\w-]+)/?$ $1.php?id=$2 [L,QSA]
RewriteCond %{DOCUMENT_ROOT}/proj1/$1.php -f
RewriteRule ^([^.]+?)/?$ $1.php [L]
他说它在他的环境中工作,但我没有设法在xampp或我的真实服务器上工作?
你能确认代码有效吗?你知道为什么它对我不起作用吗?
为了记录,我已将htaccess文件放在文件夹" proj1"中,因此它不在根目录下。
答案 0 :(得分:0)
当你使用错误的backrefrences和RewriteConds时,你的rewriteRule看起来并不正确。您可以在proj1 / .htaccess
中使用以下规则RewriteEngine on
RewriteRule ^post/([^/.]+)/?$ /proj1/post.php?id=$1 [L]
答案 1 :(得分:0)
如果您的固定路径前缀为/proj1/post
,则足以捕获该号码并在替换中使用该号码
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^post/(.+)$ /proj1/post.php?id=$1 [L]
如果帖子和号码都是可变的,则必须单独捕获每个部分
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+?)/(.+)$ /proj1/$1.php?id=$2 [L]