Php mod_重写并获取参数

Php mod_重写并获取参数,php,apache,.htaccess,mod-rewrite,Php,Apache,.htaccess,Mod Rewrite,我有一个网站使用以下样式的页面: index.php?page=X&id=Y 例如,对于一个博客,它将是 index.php?page=blog&id=65 ,对于一张照片来说,它可能是 index.php?page=picture&id=26 我正在尝试设置一个重写规则,这样人们可以使用mysite.com/page或mysite.com/page/id,但在传递两个参数时会出现问题 出于某种原因,它将我重定向到正确的页面,然后立即无参数地重新加载同一页面,也就是

我有一个网站使用以下样式的页面:

index.php?page=X&id=Y
例如,对于一个博客,它将是

index.php?page=blog&id=65
,对于一张照片来说,它可能是

index.php?page=picture&id=26
我正在尝试设置一个重写规则,这样人们可以使用mysite.com/page或mysite.com/page/id,但在传递两个参数时会出现问题

出于某种原因,它将我重定向到正确的页面,然后立即无参数地重新加载同一页面,也就是说,它将加载
index.php?page=blog&id=65
,然后立即重新加载
index.php?page=blog
,这是无用的

我正在使用的代码:

Options +FollowSymLinks
RewriteEngine on
RewriteBase /

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

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

如有任何建议,将不胜感激。谢谢。

解决此问题的最佳方法是将所有请求重定向到路由器页面(通常是
index.php
文件),并使其包含实际请求的文件。它使您能够更好地控制重定向到哪里的内容,并允许使用比正则表达式更复杂的规则


至于你的具体问题。它可能是一个正在重新加载窗口的JavaScript,或者您的PHP代码中有一些
位置:
标题。

阅读mod_rewrite文档,特别是[QSA](查询字符串附加)标志。否则,如果在替换字符串中指定新参数,重写引擎将转储现有参数。有了它,它将附加旧的

如果它立即用一些其他参数重新加载页面,听起来像是javascript尝试将组从
([^/]+)
更改为
([^/?]+)
。这样,它们将不匹配查询字符串参数。您也可以使用
RewriteCond%{QUERY\u STRING}[something]
,但这取决于您想要重定向的方式。@alganet URL路径永远不会包含查询字符串。mod_rewrite在应用重写规则之前将其删除