Apache 为什么htaccess规则重写url后我不能访问我的页面和查询参数? 我有一个url的形式-> 我想在表单-> 我希望能够在url被重写后访问内容页上的查询参数id及其值xyz 所有页面都是*.php页面 我使用了以下htaccess重写规则 RewriteEngine On # Hide .php file extension in the urls RewriteRule ^([^/.]+)$ $1.php RewriteRule ^content/([A-Za-z0-9-]+)/?$ content?id=$1 [NC,L] 当我导航到重写的url时,它不起作用,我得到以下错误: 找不到 在此服务器上找不到请求的URL 我也无法访问重写url上的查询参数及其值 但是,当我输入原始url时,这就起作用了,我可以访问查询参数及其值

Apache 为什么htaccess规则重写url后我不能访问我的页面和查询参数? 我有一个url的形式-> 我想在表单-> 我希望能够在url被重写后访问内容页上的查询参数id及其值xyz 所有页面都是*.php页面 我使用了以下htaccess重写规则 RewriteEngine On # Hide .php file extension in the urls RewriteRule ^([^/.]+)$ $1.php RewriteRule ^content/([A-Za-z0-9-]+)/?$ content?id=$1 [NC,L] 当我导航到重写的url时,它不起作用,我得到以下错误: 找不到 在此服务器上找不到请求的URL 我也无法访问重写url上的查询参数及其值 但是,当我输入原始url时,这就起作用了,我可以访问查询参数及其值,apache,.htaccess,mod-rewrite,url-rewriting,friendly-url,Apache,.htaccess,Mod Rewrite,Url Rewriting,Friendly Url,如果有人能帮我找出我做错了什么,以及如何解决这个问题,我将不胜感激 谢谢, Dexterr.对于所显示的样本,请尝试以下一次。请在测试URL之前清除浏览器缓存 RewriteEngine On # Hide .php file extension in the urls RewriteRule ^([^/.]+)$ $1.php [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d Rewrit

如果有人能帮我找出我做错了什么,以及如何解决这个问题,我将不胜感激

谢谢,
Dexterr.

对于所显示的样本,请尝试以下一次。请在测试URL之前清除浏览器缓存

RewriteEngine On

# Hide .php file extension in the urls
RewriteRule ^([^/.]+)$ $1.php [L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^content/([A-Za-z0-9-]+)/?$ content.php?id=$1 [NC,L] 

您可能需要使用base标记来修复js和其他相关资源。如果您使用相对路径链接js文件,那么该文件显然会得到404,因为它正在查找URL路径。例如,如果URL路径是/file/而不是file.html,那么您的相对资源是从/file/加载的,该文件不是目录,而是重写的html文件。要解决此问题,请将链接设置为绝对链接或使用基本标记。在网页的标题中添加此项,以便从正确位置加载相关链接。

对于显示的示例,请尝试以下一次。请在测试URL之前清除浏览器缓存

RewriteEngine On

# Hide .php file extension in the urls
RewriteRule ^([^/.]+)$ $1.php [L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^content/([A-Za-z0-9-]+)/?$ content.php?id=$1 [NC,L] 

您可能需要使用base标记来修复js和其他相关资源。如果您使用相对路径链接js文件,那么该文件显然会得到404,因为它正在查找URL路径。例如,如果URL路径是/file/而不是file.html,那么您的相对资源是从/file/加载的,该文件不是目录,而是重写的html文件。要解决此问题,请将链接设置为绝对链接或使用基本标记。在您的网页标题中添加此链接,以便您的相关链接可以从正确的位置加载。

感谢您添加格式良好的详细信息。这里有一个问题:https://websitename.com/content?id=xyz 这是您在浏览器上点击的url吗?哪个应该改成https://websitename.com/content/xyz 在浏览器中?请确认一下。@RavinderSingh13:1。我有另一个叫做主页的页面,其中有一个指向->2的链接。当点击上面的链接时,它应该将我带到该url,它确实会这样做,但随后我会得到未找到错误3。如果我将链接指向->,然后单击它,那么它可以工作,但不会被重写,并且原始url显示在browserRewriteRule ^content/[A-Za-z0-9-]+/?$content.php?id=$1[NC,L]中,这可能是因为您缺少.php,如上所示。我不确定这一点,但每当我编写.htaccess文件时,我总是编写类似RewriteRule^product listing/[0-9a-zA-Z=-]+/$product listing.php?key=$1[NC,L]this@RichPhp: 1. 谢谢你的建议。我做了你建议的更改,效果很好,但是我的css被搞得一团糟,我不得不更改标题中对css文件的引用。2.我的所有页面都在根目录中,css和js都在各自的文件夹root/css和root/js中。3.页面中的css和js最初在4中被引用为css/mycssfile。但在您建议的更改之后,样式变得一团糟,只有在我更改了to../css/mycssfileif中的css引用后,才得以修复,只要您使用.htaccess在公共文件中,该文件包含在所有内容的顶部就可以定义url,就像这样定义“url”,example.com;然后只是在css链接标签使用这样的感谢添加格式良好的细节荣誉。这里有一个问题:https://websitename.com/content?id=xyz 这是您在浏览器上点击的url吗?哪个应该改成https://websitename.com/content/xyz 在浏览器中?请确认一下。@RavinderSingh13:1。我有另一个叫做主页的页面,其中有一个指向->2的链接。当点击上面的链接时,它应该将我带到该url,它确实会这样做,但随后我会得到未找到错误3。如果我将链接指向->,然后单击它,那么它可以工作,但不会被重写,并且原始url显示在browserRewriteRule ^content/[A-Za-z0-9-]+/?$content.php?id=$1[NC,L]中,这可能是因为您缺少.php,如上所示。我不确定这一点,但每当我编写.htaccess文件时,我总是编写类似RewriteRule^product listing/[0-9a-zA-Z=-]+/$product listing.php?key=$1[NC,L]this@RichPhp: 1. 谢谢你的建议。我做了你建议的更改,效果很好,但是我的css被搞得一团糟,我不得不更改标题中对css文件的引用。2.我的所有页面都在根目录中,css和js都在各自的文件夹root/css和root/js中。3.页面中的css和js最初在4中被引用为css/mycssfile。但是在您建议的更改之后,样式变得一团糟,只有在我更改了to../css/mycss中的css引用之后才得以修复
fileif每当您在公共文件中使用.htaccess时,只要像下面这样定义“url”,example.com,就可以定义url;然后在css链接标签中使用如下1。混乱的链接可以正确使用您建议的2。url重写可以与以下htaccess规则和您建议的更改配合使用URL RewriteRule^[^/]+$$1.php RewriteRule^ content/[A-Za-z0-9-]+/?$content.php?id=$1[NC,L]``3中隐藏.php文件扩展名的RewriteEngine。下面两行是做什么的?为什么需要它们重写cond%{REQUEST_FILENAME}-f RewriteCond%{REQUEST_FILENAME}-d```@dexterr,这些条件将确保仅在uri的页面不存在时应用,否则它将应用于现有的页面SEG->css、js和其他我们不想应用它们的主页,如果这对您有帮助,请告诉我。1。混乱的链接可以正确使用您建议的2。url重写可以与以下htaccess规则和您建议的更改配合使用URL RewriteRule^[^/]+$$1.php RewriteRule^ content/[A-Za-z0-9-]+/?$content.php?id=$1[NC,L]``3中隐藏.php文件扩展名的RewriteEngine。下面两行是做什么的?为什么需要它们重写cond%{REQUEST_FILENAME}-f RewriteCond%{REQUEST_FILENAME}-d```@dexterr,这些条件将确保仅在uri的页面不存在时应用,否则它将应用于现有的页面SEG->css、js和其他我们不想应用它们的主页,如果这对您有帮助,请告诉我。