【问题标题】:.htaccess pretty URLs are not working.htaccess 漂亮的 URL 不起作用
【发布时间】:2015-03-09 14:02:18
【问题描述】:

我正在尝试在我的网站上使用漂亮的 URL,但我对 htaccess 了解不多,但经过一番搜索后,我得到了这样的结果:

RewriteEngine On
RewriteRule ^([a-z]+)\/([0-9]+)\/?$ content.php?action=$1&id=$2 [NC]

我正在尝试改变这一点:

mysite.com/cms/content.php?action=content&id=80

进入:

mysite.com/cms/content/80

但不知何故它不起作用,我得到的是一个空白屏幕和一个 404 错误,

Failed to load resource: the server responded with a status of 404 (Not Found) --in-- /cms/files/plugin/tinymce/tinymce.min.js

关于 404 错误:它应该从 mystie.com/files/plugin/tinymce/tinymce.min.js 加载一个 .js 文件——不是——mystie.com/cms/files/plugin/tinymce/tinymce。 min.js

我的 htaccess 文件位于根文件夹中。我做错了吗?

我认为服务器没有读取我的 .htaccess 文件。如何找出问题?

【问题讨论】:

  • @anubhava 它在根目录下。有一个 404 错误,加载资源失败:服务器响应状态为 404(未找到)--in-- /cms/files/plugin/tinymce/tinymce.min.js
  • /cms/ 是 wordpress 安装吗? /cms/ 文件夹是否也有 .htaccess?
  • @anubhava no in cms 是我自己的 cms。 /cms 中没有任何 htaccess。在上一个答案中,大约 404 错误。它应该从 mystie.com/files/plugin/tinymce/tinymce.min.js 加载 .js 文件——不是——mystie.com/cms/files/plugin/tinymce/tinymce.min.js——有什么问题?
  • 将有关 cmets 的信息添加到您的问题中并改进了一些格式和语法
  • 好的,感谢编辑。对不起我的英语不好@FabioAntunes

标签: php .htaccess mod-rewrite clean-urls pretty-urls


【解决方案1】:

你需要把这条规则放在/cms/.htaccess:

RewriteEngine On
RewriteBase /cms/

RewriteRule ^([a-z]+)/([0-9]+)/?$ content.php?action=$1&id=$2 [NC,L,QSA]

然后,您需要在页面 HTML 的 <head> 部分添加:<base href="/" />,以便从该 URL 而非当前页面的相对 URL 解析每个相对 URL。

【讨论】:

  • 此代码也不起作用。我认为问题是别的。
  • 谢谢,现在我知道 htaccess 工作正常。你的答案也很完美,但是css或没有加载,我正在处理它,我认为需要更改基础或src ..感谢你的大力帮助。
  • 这个已经有了。但css会重定向。 css 在 css/style.css 但它重定向到 cms/style.css,我应该将 css src 更改为 /cms/style/style.css 吗?
  • 是的,使用这样的完整路径总是更好。如果您的 css/js 在 /cms/ 中,那么您需要在 HTML 的 head 部分中使用:<base href="/cms/" />
【解决方案2】:
RewriteEngine On
RewriteRule ^/cms/([a-z]+)/([0-9]+)$ content.php?action=$1&id=$2 [NC]

删除转义斜线\

【讨论】:

  • 但它不起作用。仍然是空白屏幕。有什么问题?
  • 如果您的 htaccess 在 cms 文件夹中,请从重写规则中删除 /cms。
【解决方案3】:

如果您的 htaccess 在根目录中,您需要确保包含子文件夹。 试试这个规则。

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^cms/([a-z]+)/([0-9]+)/?$ /cms/content.php?action=$1&id=$2 [NC,L]

此外,空白屏幕通常意味着 PHP 错误。

【讨论】:

    【解决方案4】:

    您的 URL 中的 /cms/ 位于其余部分之前,因此您需要将 RewriteRule 更改为以下内容:

    RewriteRule ^cms/([a-z]+)\/([0-9]+)\/?$ content.php?action=$1&id=$2 [NC]
    

    另外,我希望您知道.htaccess 不能在某些服务器上运行(例如nginx 或一些自定义服务器),即使在Apache 服务器上也可以禁用mod_rewrite

    【讨论】:

    • 仍然无法正常工作.. 是的,您说得对,但我之前在此服务器的另一个网站上检查过。在 wordpress 和其他带有漂亮 urls 插件的 cms 上测试。
    【解决方案5】:

    我的猜测是您的脚本和样式是通过相对 URL 链接到的。因为旧 URL 是 /cms/content.php,所以 URI 基是 /cms/,并且您的相关链接都解析为在 /cms/ 下,我认为这就是您想要的。

    但是,当您将链接更改为 /cms/content/1234 时,URI 基础将变为 /cms/content/,并且所有相关链接都将使用它作为其基础,并且由于“内容”甚至不是真正的文件夹,所有这些链接都会404,并且您不会加载任何 CSS 内容或脚本。

    要么将链接更改为绝对 URL,要么在页面标题中指定 URI 基础(在 <head> </head> 标签内):

    <base href="/cms/" />
    

    【讨论】:

    • 这也不起作用。无论如何感谢您的回答。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-04-06
    • 1970-01-01
    • 1970-01-01
    • 2019-02-27
    • 1970-01-01
    • 2023-02-26
    • 1970-01-01
    相关资源
    最近更新 更多